{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "900fbd04-f6aa-4813-868f-1c54e3265385",
   "metadata": {},
   "source": [
    "# FastEmbed by Qdrant\n",
    "\n",
    ">[FastEmbed](https://qdrant.github.io/fastembed/) from [Qdrant](https://qdrant.tech) is a lightweight, fast, Python library built for embedding generation. \n",
    ">\n",
    ">- Quantized model weights\n",
    ">- ONNX Runtime, no PyTorch dependency\n",
    ">- CPU-first design\n",
    ">- Data-parallelism for encoding of large datasets."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "2a773d8d",
   "metadata": {},
   "source": [
    "## Dependencies\n",
    "\n",
    "To use FastEmbed with LangChain, install the `fastembed` Python package."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "91ea14ce-831d-409a-a88f-30353acdabd1",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%pip install --upgrade --quiet  fastembed"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "426f1156",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3f5dc9d7-65e3-4b5b-9086-3327d016cfe0",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain_community.embeddings.fastembed import FastEmbedEmbeddings"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c77b0bb-2613-4167-a204-14d424b59105",
   "metadata": {},
   "source": [
    "## Instantiating FastEmbed\n",
    "   \n",
    "### Parameters\n",
    "- `model_name: str` (default: \"BAAI/bge-small-en-v1.5\")\n",
    "    > Name of the FastEmbedding model to use. You can find the list of supported models [here](https://qdrant.github.io/fastembed/examples/Supported_Models/).\n",
    "\n",
    "- `max_length: int` (default: 512)\n",
    "    > The maximum number of tokens. Unknown behavior for values > 512.\n",
    "\n",
    "- `cache_dir: Optional[str]`\n",
    "    > The path to the cache directory. Defaults to `local_cache` in the parent directory.\n",
    "\n",
    "- `threads: Optional[int]`\n",
    "    > The number of threads a single onnxruntime session can use. Defaults to None.\n",
    "\n",
    "- `doc_embed_type: Literal[\"default\", \"passage\"]` (default: \"default\")\n",
    "    > \"default\": Uses FastEmbed's default embedding method.\n",
    "    \n",
    "    > \"passage\": Prefixes the text with \"passage\" before embedding."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6fb585dd",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "embeddings = FastEmbedEmbeddings()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "119fbaad-9442-4fff-8214-c5f597bc8e77",
   "metadata": {},
   "source": [
    "## Usage\n",
    "\n",
    "### Generating document embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "62920051-cbd2-460d-ba24-0424c1ed395d",
   "metadata": {},
   "outputs": [],
   "source": [
    "document_embeddings = embeddings.embed_documents(\n",
    "    [\"This is a document\", \"This is some other document\"]\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fd10d96-baee-468f-a532-b70b16b78d1f",
   "metadata": {},
   "source": [
    "### Generating query embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9f793bb6-609a-4a4a-a5c7-8e8597228915",
   "metadata": {},
   "outputs": [],
   "source": [
    "query_embeddings = embeddings.embed_query(\"This is a query\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
